package com.hq.fxh.HttpApi;

import com.hq.fxh.Modle.AutoNewsListModle;
import com.hq.fxh.Modle.AutoNewsModle;
import com.hq.fxh.Modle.CityModle;
import com.hq.fxh.Modle.CityUrlModle;
import com.hq.fxh.Modle.CreateMemberRes;
import com.hq.fxh.Modle.FavotityListGetModle;
import com.hq.fxh.Modle.FollowUserModle;
import com.hq.fxh.Modle.ForgetPwdRes;
import com.hq.fxh.Modle.GetAllRankRes;
import com.hq.fxh.Modle.GetAutoNewsHomeModle;
import com.hq.fxh.Modle.GetDayStatisticalResultRes;
import com.hq.fxh.Modle.GetEnterpriseMaterialRes;
import com.hq.fxh.Modle.GetEnterpriseRankRes;
import com.hq.fxh.Modle.GetEnterpriseReportRes;
import com.hq.fxh.Modle.GetEntertainmentListRes;
import com.hq.fxh.Modle.GetMaterialByCategoryIdRes;
import com.hq.fxh.Modle.GetMaterialCategoryRes;
import com.hq.fxh.Modle.GetMyPostModle;
import com.hq.fxh.Modle.GetPushBaseInfoRes;
import com.hq.fxh.Modle.GetPushDataRes;
import com.hq.fxh.Modle.GetPushDetailInfoRes;
import com.hq.fxh.Modle.GetPushStatisticListRes;
import com.hq.fxh.Modle.GetUserNumData;
import com.hq.fxh.Modle.GetVideoListModle;
import com.hq.fxh.Modle.GetWeekStatisticalResultRes;
import com.hq.fxh.Modle.JianLiModle;
import com.hq.fxh.Modle.JianLiUpModle;
import com.hq.fxh.Modle.KanTieListModle;
import com.hq.fxh.Modle.MyResponseBody;
import com.hq.fxh.Modle.PlateListModle;
import com.hq.fxh.Modle.PlateSoreModle;
import com.hq.fxh.Modle.RequstReq;
import com.hq.fxh.Modle.SelectByCategoryIdRes;
import com.hq.fxh.Modle.SelectByMemberIdRes;
import com.hq.fxh.Modle.SelectByMobileAndPwdRes;
import com.hq.fxh.Modle.SelectByMobileRes;
import com.hq.fxh.Modle.SpaceUserPostModle;
import com.hq.fxh.Modle.Space_UserVideo_Modle;
import com.hq.fxh.Modle.UploadImgRes;
import com.hq.fxh.Modle.UserGetModle;
import com.hq.fxh.No3_TuiGuang.MyMoBan.Model.CommonRes;
import com.hq.fxh.No3_TuiGuang.MyMoBan.Model.GetAdvertByUidRes;
import com.hq.fxh.No3_TuiGuang.MyMoBan.Model.GetHomePageByUidRes;
import com.hq.fxh.No3_TuiGuang.MyMoBan.Model.GetWebUrlRes;
import com.hq.fxh.No5_User.User.Activity.MyPlate;

import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Url;
import rx.Observable;

import static cn.jpush.im.android.tasks.GetUserInfoListTask.IDType.uid;

/**
 * /**
 *
 * @author 薛
 * @ClassName
 * @Description :
 * @Created 2017/8/16
 * @Email xlwenhao1858@sina.com
 */


public interface UserService {


    //   GetNewsList(int type, string categoryId, int last_index)
    @FormUrlEncoded
    @POST
    Call<MyResponseBody> UpdateMemberInfo(@Url String url, @Field("uid") String uid, @Field("sex") String sex, @Field("nickName") String nickName,
                                          @Field("face") String face, @Field("province") String province, @Field("city") String city,
                                          @Field("address") String address, @Field("province_id") String province_id, @Field("city_id") String city_id,
                                          @Field("tag") String tag, @Field("birth") String birth
    );


    @FormUrlEncoded
    @POST
    Call<UserGetModle> GetMemberInfo(@Url String url, @Field("uid") int uid);


    @FormUrlEncoded
    @POST
    Call<AutoNewsListModle> GetNewsList(@Url String url, @Field("type") int type, @Field("categoryId") String categoryId, @Field("last_index") int last_index);

    @FormUrlEncoded
    @POST/*int page, int pageSize, int member_id*/
    Call<Space_UserVideo_Modle> GetUserVideoList(@Url String url, @Field("member_id") int member_id, @Field("page") int page, @Field("pageSize") int pageSize);


    @FormUrlEncoded
    @POST/*(int to_uid, int page, int page_size*/
    Call<SpaceUserPostModle> GetUserPlateList(@Url String url, @Field("to_uid") int to_uid, @Field("page") int page, @Field("page_size") int page_size);


    @FormUrlEncoded
    @POST("v3/api.asmx/GetHotArticle")
    Observable<GetAllRankRes> getHotArticle(@Field("type") int type);

    @POST("v4/api.asmx/GetPushStatisticList")
    Observable<GetPushStatisticListRes> getPushStatisticList();

    @POST("v4/api.asmx/GetPushDetailInfo")
    Observable<GetPushDetailInfoRes> getPushDetailInfo();

    @POST("v4/api.asmx/GetPushBaseInfo")
    Observable<GetPushBaseInfoRes> getPushBaseInfo();

    @FormUrlEncoded
    @POST("v4/api.asmx/GetPushData")
    Observable<GetPushDataRes> getPushData(@Field("type") int type);//type 1日 2 月


    /**
     * 【点赞】
     * <param name="type">1新闻(预留，暂不能对新闻点赞) 2帖子 3视频 4评论</param>
     * <param name="target_id">目标ID(新闻/帖子/视频/评论)</param>
     *
     * @return
     */

    @FormUrlEncoded
    @POST
    Call<GetAutoNewsHomeModle> AutoRefreshHome(@Url String url, @Field("categoryId") int categoryId);


    @GET
    Call<CityUrlModle> getGpsCity(@Url String url);


    @FormUrlEncoded
    @GET("/v5/api.asmx/SetGood")
    Observable<MyResponseBody> SetGood(@Field("type") int type, @Field("target_id") int target_id);

    /**
     * 【视频--获取上传视频的sign】
     *
     * @return
     */
    @POST("v3/api.asmx/GetVideoUploadSign")
    Observable<CommonRes> getVideoUploadSign();


    @GET
    Call<MyResponseBody> ClearUserData(@Url String url);


    /**
     * 【获取我的帖子】[page][pageSize][type:1视频 2美女 3搞笑]
     *
     * @param page
     * @param target_id 目标ID(新闻/帖子/视频)
     * @param type      1新闻 2帖子 3视频
     * @return
     */
    @FormUrlEncoded
    @GET("/v5/api.asmx/GetComment")
    Observable<ResponseBody> GetComment(@Field("type") int type, @Field("target_id") int target_id, @Field("page") int page, @Field("page_size") int page_size);

    /**
     * 【获取我的帖子】[page][pageSize][type:1视频 2美女 3搞笑]
     *
     * @param type       1新闻 2帖子 3视频
     * @param target_id  目标ID(新闻/帖子/视频)
     * @param comment_id 回复ID,直接评论时该值为0,回复评论时，该值为评论的ID
     * @return
     */
    @FormUrlEncoded
    @POST("/v5/api.asmx/Comment")
    Observable<ResponseBody> Comment(@Field("type") int type, @Field("target_id") int target_id, @Field("comment_id") int comment_id, @Field("content") String content);

    @FormUrlEncoded
    @POST
    Call<ResponseBody> Comment2(@Url String url, @Field("type") int type, @Field("target_id") int target_id, @Field("comment_id") int comment_id, @Field("content") String content);

    /**
     * 【获取我的帖子】[page][pageSize][type:1视频 2美女 3搞笑]
     *
     * @param page
     * @param pageSize
     * @param type
     * @return
     */
    @FormUrlEncoded
    @POST("v3/api.asmx/GetMySelfEntertainmentList")
    Observable<GetEntertainmentListRes> getMySelfEntertainmentList(@Field("page") int page, @Field("pageSize") int pageSize, @Field("type") int type);

    @FormUrlEncoded
    @POST("/v5/api.asmx/GetUserData")
    Observable<GetUserNumData> GetUserData(@Field("member_id") int member_id);


    @FormUrlEncoded
    @POST("/v5/api.asmx/GetVideoList")
    Observable<GetVideoListModle> getVideo(@Field("member_id") int member_id, @Field("page") int page, @Field("pageSize") int pageSize);


    /**
     * 【删除帖子】[subjectId][type:1视频 2美女 3搞笑]
     *
     * @param subjectId
     * @param type
     * @return
     */
    @FormUrlEncoded
    @POST("v3/api.asmx/DelSubject")
    Observable<CommonRes> delSubject(@Field("subjectId") String subjectId, @Field("type") int type);

    /**
     * 根据会员ID获得会员信息
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/GetMemberInfo")
    Observable<SelectByMemberIdRes> selectByMemberId(@Field("uid") int uid);


    /**
     * 更新用户广告模板
     */
    @FormUrlEncoded
    @POST("v3/api.asmx/UpdateAdvert")
    Observable<CommonRes> updateAdvert(@Field("uid") String uid, @Field("json") String json);


    @FormUrlEncoded
    @POST
    Call<ResponseBody> DelFavorites(@Url String url, @Field("type") int type, @Field("target_id") String target_id);

    @FormUrlEncoded
    @POST
    Call<FavotityListGetModle> GetFavorites(@Url String url, @Field("page") int page, @Field("page_size") int page_size);


    @FormUrlEncoded
    @POST
    Call<ResponseBody> AddFavorites(@Url String url, @Field("type") int type, @Field("target_id") String target_id);


    @FormUrlEncoded
    @POST
    Call<ResponseBody> DelMyPlate(@Url String url, @Field("post_id") int post_id);


    /**
     * 更新简历意向
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> UpdateResumeWish(@Url String url, @Field("json") String json, @Field("member_id") String member_id);

    /**
     * 设置简历是否公开
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> SetResumePublic(@Url String url, @Field("member_id") String member_id, @Field("is_public") int is_public);

    /**
     * 获取简历意向
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> GetResumeWish(@Url String url, @Field("member_id") String member_id);

    /**
     * 获取简历教育经历
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> getJianLiEdu(@Url String url, @Field("member_id") String member_id);

    /**
     * 删除简历教育经历
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> deleteJianLiEdu(@Url String url, @Field("edu_id") String edu_id);

    /**
     * 增加简历教育经历
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> addJianLiEdu(@Url String url, @Field("json") String json);

    /**
     * 获取简历工作经历
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> getJianLiWork(@Url String url, @Field("member_id") String member_id);

    /**
     * 删除简历工作经历
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> deleteJianLiWork(@Url String url, @Field("work_id") String work_id);

    /**
     * 增加简历工作经历
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> addJianLiWork(@Url String url, @Field("json") String json);


    /**
     * 获取城市列表
     */
    @GET
    Call<ResponseBody> getCity(@Url String url);

    /**
     * 更新简历个人基本信息
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> upJianLi(@Url String url, @Field("json") String json);

    /**
     * 获取简历个人基本信息
     */
    @FormUrlEncoded
    @POST
    Call<JianLiModle> getJianLi(@Url String url, @Field("member_id") String member_id);

    /************************************************帖子相关接口********************************************************/





 /*   @FormUrlEncoded
    @POST
    Call<KanTieListModle> getBlackUser(@Url String url, @Field("type") int type, @Field("page") int page, @Field("page_size") int page_size);
*/

    /**
     * 获取看帖列表
     * 参数  categort_id 二级标题  type 1 全部 2 精选
     */
    @FormUrlEncoded
    @POST
    Call<KanTieListModle> getKanTieList(@Url String url, @Field("type") int type, @Field("page") int page, @Field("page_size") int page_size);


    /**
     * 获取我的帖子
     * 参数  categort_id 二级标题  type 1 全部 2 精选
     */
    @FormUrlEncoded
    @POST
    Call<GetMyPostModle> getMyPost(@Url String url, @Field("page") int page, @Field("page_size") int page_size);

    /**
     * 获取黑名单列表
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> getBlackUser(@Url String url, @Field("page") int page, @Field("page_size") int page_size);

    /**
     * 添加黑名单用户
     * 参数    to_uid  目标用户  type 1 加入 2 移除
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> addBlackUser(@Url String url, @Field("type") int type, @Field("to_uid") String to_uid);


    /**
     * 获取关注列表
     * 参数   1 我关注的用户  2我的粉丝 3 我关注的板块
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> GetFollowerList(@Url String url, @Field("type") int type, @Field("page") int page, @Field("page_size") int page_size);


    /**
     * 添加关注
     * type  1 关注 2 取消关注
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> addFollowerUser(@Url String url, @Field("type") int type, @Field("to_uid") String to_uid);

    @FormUrlEncoded
    @POST
    Call<MyResponseBody> addFollowerUser2(@Url String url, @Field("type") int type, @Field("to_uid") String to_uid);


    /**
     * 获取帖子列表
     * 参数  categort_id 二级标题  type 1 全部 2 精选
     */
    @FormUrlEncoded
    @POST
    Call<PlateListModle> getPlateList(@Url String url, @Field("category_id") int category_id, @Field("type") int type, @Field("page") int page, @Field("page_size") int page_size);

    /**
     * 获取帖子分类信息
     */
    @GET
    Call<PlateSoreModle> GetPlateSortList(@Url String url);

    /**
     * 上传帖子
     */
    @FormUrlEncoded
    @POST
    Call<RequstReq> uploadPlate(@Url String url, @Field("content") String content);


    /**
     * 关注板块
     * </summary>
     * <param name="type">1 关注 2取消关注</param>
     * <param name="category_id">二级板块ID</param>
     */
    @FormUrlEncoded
    @POST
    Call<ResponseBody> followerPlateSort(@Url String url, @Field("type") int type, @Field("category_first_id") int category_first_id, @Field("category_id") int category_id);
/*********************************************************登录接口**********************************************************/
    /**
     * 忘记密码
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/ForgetPassword ")
    Observable<ForgetPwdRes> updateByMemberPasswordWhenForget(@Field("mobile") String mobile, @Field("newpwd") String pwd, @Field("code") String identCode);

    /**
     * 创建会员信息（注册）String mobile, String pwd, String identCode,String appKey,String secret,String date,String signaturen,
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/Register")
    Observable<CreateMemberRes> createMember(@Field("mobile") String mobile, @Field("pwd") String pwd, @Field("code") String identCode);

    /**
     * 根据手机号码查询会员（会员是否已注册）
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/member/selectByMobile")
    Observable<SelectByMobileRes> selectByMobile(@Field("mobile") String mobile);

    /**
     * 【发送短信验证码】 [mobile手机号] [type 1注册 2找回密码]
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/SendMsg")
    Observable<CommonRes> sendMsg(@Field("mobile") String mobile, @Field("type") int type);


    @FormUrlEncoded
    @POST("demoapi.asmx/SendMsg")
    Observable<ResponseBody> getCity(@Field("mobile") String mobile, @Field("type") int type);

    /**
     * 根据手机号码和密码查询会员(登录)
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/Login")
    Observable<SelectByMobileAndPwdRes> selectByMobileAndPwd(@Field("mobile") String mobile, @Field("pwd") String pwd, @Field("device") String device, @Field("sys_type") String sys_type, @Field("client_id") String client_id);

/**************************************************************获取模板和推广接口********************************************************************************************/
    /**
     * 获取广告模板
     */
    @FormUrlEncoded
    @POST("v3/api.asmx/GetAdvertByUid")
    Observable<GetAdvertByUidRes> getAdTemp(@Field("uid") String uid);


    @FormUrlEncoded
    @POST("v2/api.asmx/GetMaterialByCategoryId")
    Observable<GetMaterialByCategoryIdRes> getMaterialByCategoryId(@Field("category_id") int category_id, @Field("page") int page, @Field("pageSize") int pageSize);


    @POST("v2/api.asmx/GetMaterialCategory")
    Observable<GetMaterialCategoryRes> getMaterialCategory();

    /**
     * 【获取企业素材库】[uid:用户id]
     */
    @FormUrlEncoded
    @POST("v2/api.asmx/GetEnterpriseMaterial")
    Observable<GetEnterpriseMaterialRes> getEnterpriseMaterial(@Field("uid") String uid, @Field("page") int page, @Field("pageSize") int pageSize);


    @FormUrlEncoded
    @POST("v2/api.asmx/DelMemberMaterial")
    Observable<CommonRes> delMemberMaterial(@Field("uid") int uid, @Field("material_id") int material_id);

    /**
     * 【获取企业素材库】[uid:用户id]
     */
    @FormUrlEncoded
    @POST("v2/api.asmx/GetEnterpriseAdvert")
    Observable<GetAdvertByUidRes> getEnterpriseAdvert(@Field("uid") String uid);

    /**
     * 【近七日企业详细数据】
     */
    @FormUrlEncoded
    @POST("enterprise.asmx/GetWeekStatisticalResult")
    Observable<GetWeekStatisticalResultRes> getWeekStatisticalResult(@Field("uid") String uid);

    /**
     * 【某日员工详细数据】[uid],[date:日期 例:2016-12-26], [sort:1曝光 2点击 3转发 4文章总数],[page:页数 从1开始],[pageSize:每页条数]
     */
    @FormUrlEncoded
    @POST("enterprise.asmx/GetDayStatisticalResult")
    Observable<GetDayStatisticalResultRes> getDayStatisticalResult(@Field("uid") String uid, @Field("date")
            String date, @Field("sort") int sort, @Field("page") int page, @Field("pageSize") int pageSize);


    /**
     * 【企业数据统计】[uid]
     */
    @FormUrlEncoded
    @POST("enterprise.asmx/GetEnterpriseReport")
    Observable<GetEnterpriseReportRes> getEnterpriseReport(@Field("uid") String uid);

    /**
     * 【获取图集列表】[page][pageSize]
     *
     * @param page
     * @param pageSize
     * @return
     */
    @FormUrlEncoded
    @POST("v3/api.asmx/GetPicSubjectList")
    Observable<GetEntertainmentListRes> getPicSubjectList(@Field("page") int page, @Field("pageSize") int pageSize, @Field("type") int type);


    /**
     * 【获取娱乐列表】[page][pageSize][type:1视频 2美女 3搞笑]
     *
     * @param page
     * @param pageSize
     * @param type
     * @return
     */
    @FormUrlEncoded
    @POST("v3/api.asmx/GetEntertainmentList")
    Observable<GetEntertainmentListRes> getEntertainmentList(@Field("page") int page, @Field("pageSize") int pageSize, @Field("type") int type);


    /**
     * 上传图片
     * 参数  key:标识  serializeData:文件数据  type:图片类型
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/UploadImg")
    Observable<UploadImgRes> uploadImg(@Field("key") String key, @Field("serializedData") String serializedData, @Field("type") String type);


    /**
     * 根据文章栏目ID查询文章,返回列表
     * [categoryID] 数据所属ID
     *
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/GetNewsByCategoryId")
    Observable<SelectByCategoryIdRes> selectByCategoryId(@Field("categoryId") String id, @Field("page") int pageNum, @Field("pageSize") int pageSize);


    /**
     * 【本月员工排行榜】[uid],[sort:1曝光 2点击 3转发 4文章总数],[page:页数 从1开始],[pageSize:每页条数]
     */
    @FormUrlEncoded
    @POST("enterprise.asmx/GetEnterpriseRank")
//type 1表示月榜 2表示总榜  没有这个参数的话 直接返回月榜 sort:曝光 点击 转发 文章
    Observable<GetEnterpriseRankRes> getEnterpriseRank(@Field("uid") String uid, @Field("sort") int sort, @Field("type") int type, @Field("page") int page, @Field("pageSize") int pageSize);


    /**
     * 获取Web页面地址
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/GetWebUrl")
    Observable<GetWebUrlRes> getWebUrl(@Field("uid") String uid);

    /**
     * 获取形象空间所有信息
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/GetHomePageByUid")
    Observable<GetHomePageByUidRes> getHomePageByUid(@Field("uid") String uid);

    /**
     * 更新形象空间
     */
    @FormUrlEncoded
    @POST("demoapi.asmx/UpdateHomePageInfo")
    Observable<CommonRes> updateHomePageInfo(@Field("uid") String uid, @Field("type") int type, @Field("json") String json);


}
